package com.espirit.eap.manager;

import org.springframework.stereotype.Component;

import com.espirit.eap.pagelayout.Model;
@Component
public interface ModelBuilder {
	boolean init();
	/*
	 * 构建model 的所有属性（字段） 
	 */
	void buildField();
	
	/*
	 * 获取模型
	 */
	Model getResult();

	boolean buildFieldsInfoOk();
	void setBuildFieldsInfoOk(boolean buildFieldsOk);
	
	/*
	 *  构建model的属性（字段）的关联属性，主要是DefModel属性
	 *  之所以要把Fields & FieldsInfo分开，是考虑到Property有引用Model，有循环引用
	 */
	void buildFieldsProperty();
	void buildFieldsInfo();
	
	boolean buildLayoutOk();
	void setBuildLayoutOk(boolean builderDataOk);
	/*
	 * 构建model相关视图的按钮，如
	 */
	void buildButtons();
	/*
	 * 构建model布局的元素：一般是字段、按钮，复杂的还能包含其他element的任何元素
	 */
	void prepareLayoutElements();
	/*
	 * 构建Layout：主要是ListLayout、DetailLayout，还有其他自定义的Layout
	 */
	void buildLayout();
	
	
	void preBuildMiscData();
	
	
	boolean buildMiscDataOk();
	void setBuildMiscDataOk(boolean builderMiscDataOk);
	/*
	 * 构建model的杂项数据
	 */
	void buildMiscData();
	
	/*
	 * 构建Model的相关初始数据
	 */
	void buildModelInitData();
	
	/*
	 * 获取model
	 */
	
	Model getModelData();
	
	void clean();
}
